﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using SistemaCenterQuimPost.Control; //usado para validar datos

namespace SistemaCenterQuimCentral.UI.CentralAdministrador
{
    public partial class frmUsuarios : SistemaCenterQuimPost.UI.PostAdministrador.frmUsuarios
    {
        //---------ATRIBUTOS-----------------------------
        private DataSet3 centerQuimDs;

        private DataSet3TableAdapters.UsuariosTableAdapter usuariosTa;

        
        //---------CONTRUCTORES--------------------------
                       
        public frmUsuarios()
        {
            InitializeComponent();

            centerQuimDs = new DataSet3();                                 //se inicializa las variables que conectarán a la base de dato
            usuariosTa = new DataSet3TableAdapters.UsuariosTableAdapter();

            cboTipoUsuario.Items.Clear(); //borramos los items que habia.

            cboTipoUsuario.Items.Add("Administrador");
            cboTipoUsuario.Items.Add("Supervisor");

        }

        //--------------ESTADOS---------------------------

        
        //-------------METODOS VARIOS--------------------
        
        protected override void actualizarUsuariosDs()
        {
            //ACTUALIZAR EL ATRIBUTO UsuarioDs
            //UsuariosDa.FillByProductos1(...);
            usuariosTa.FillByVigente(centerQuimDs.Usuarios);

            refrescarUsuariosDs = false;

        }

               
        protected override void llenar_dg()//llena el datagride con los datos de la consulta
        {
            dgvUsuarios.Rows.Clear();

            for (int i = 0; i < centerQuimDs.Usuarios.Rows.Count; i++)
            {
                dgvUsuarios.Rows.Add(centerQuimDs.Usuarios[i].nombreUsuario, centerQuimDs.Usuarios[i].tipoUsuario, centerQuimDs.Usuarios[i].contraseña);
            }

        }


        protected override void btnEliminar_Click(object sender, EventArgs e)
        {
            if (formularioValido("eliminar"))
            {

                string nombreUsuarioActual = "";

                //nombreUsuarioActual = NOMBRE USUARIO DE LA FILA ACTUAL;
                nombreUsuarioActual = dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[0].Value.ToString();

                DialogResult result = MessageBox.Show("¿Desea eliminar el usuario: " + nombreUsuarioActual + "?", "CONFIRMACION", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    try
                    {

                        //SE ELIMINA EL USUARIO DE LA FILA ACTUAL. ELIMINACION LOGICA
                        usuariosTa.UpdateQueryNombreyContraseña(dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[0].Value.ToString(), dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[2].Value.ToString());

                        MessageBox.Show("El usuario: " + nombreUsuarioActual + ", fué eliminado con exito.", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        refrescarUsuariosDs = true;

                        estEsperandoOperacion();

                    }

                    catch (IndexOutOfRangeException)
                    {
                        //Se informe que no se encontró nada porque el argumento de busqueda esta fuera del rango.
                        MessageBox.Show("Su consulta no ha arrojado resultados.", "INFORME", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        //Si llega a ocurrir algún error grave se cierra el formulario
                        this.Close();
                    }
                    catch (Exception ex)
                    {
                        //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                        MessageBox.Show("La conexión a la base de datos no fué exitosa./n/n Comuniquese con su desarrollador para solucionar el problema/n/n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        //Si llega a ocurrir algún error grave se cierra el formulario 
                        this.Close();
                    }

                }
            }


        }


        //protected virtual para que se pueda redefinir en SistemaCenterQuimCentral frmUsuario.
        protected override void agregarUsuario()
        {
            DialogResult result = MessageBox.Show("¿Está seguro en ingresar el nuevo usuario?.", "CONFIRMACION INGRESO DE USUARIO", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    //CONSULTA DE INSERT, A LOS DATOS DE TIPO STRING SE LE SACA LOS ESPACIOS BLANCOS AL PRINICIPIO Y FINAL, LUEGO SE CONVIERTE A MAYUSCULA.

                    usuariosTa.InsertQueryUsuarios(txtNombreUsuario.Text.Trim().ToUpper(), cboTipoUsuario.SelectedItem.ToString().ToUpper().Substring(0, 1), txtContraseña.Text.Trim().ToUpper(), true);
                    
                    //Se muestra un mje de confirmación.
                    MessageBox.Show("Usuario ingresado con exito!!!", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);


                    refrescarUsuariosDs = true; //Se hizo una modificación a la base de datos.

                    estEsperandoOperacion(); //Luego de insertar un usuario se vuelve al estado esperando operación
                }

                catch (IndexOutOfRangeException)
                {
                    //Se informe que no se encontró nada porque el argumento de busqueda esta fuera del rango.
                    MessageBox.Show("Su consulta no ha arrojado resultados.", "INFORME", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    //Si llega a ocurrir algún error en estado agregar
                    estEsperandoOperacion();
                }
                catch (Exception ex)
                {
                    //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                    MessageBox.Show("La conexión a la base de datos no fué exitosa. /n /n Comuniquese con su desarrollador para solucionar el problema /n /n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    //Si llega a ocurrir algún error en estado agregar 
                    this.estEsperandoOperacion();
                }

            }
        }

        //protected virtual para que se pueda redefinir en SistemaCenterQuimCentral frmUsuario. 
        protected override void editarUsuario()
        {
            DialogResult result = MessageBox.Show("¿Los datos del usuario serán modificados?.", "CONFIRMACION EDICION DE USUARIO", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    //busca el usuario por nombre.

                    usuariosTa.FillByNombreContraseña(centerQuimDs.Usuarios, dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[0].Value.ToString(), dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[2].Value.ToString());

                    centerQuimDs.Usuarios[0].nombreUsuario = txtNombreUsuario.Text.Trim().ToUpper();
                    centerQuimDs.Usuarios[0].tipoUsuario = cboTipoUsuario.SelectedItem.ToString().ToUpper().Substring(0, 1);
                    centerQuimDs.Usuarios[0].contraseña = txtContraseña.Text.Trim().ToUpper();

                    usuariosTa.Update(centerQuimDs.Usuarios);

                    //Se muestra un mje de confirmación.
                    MessageBox.Show("Usuario editado con exito!!!", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);


                    refrescarUsuariosDs = true; //Se hizo una modificación a la base de datos.

                    estEsperandoOperacion(); //Luego de editar un usuario se vuelve al estado esperando operación
                }

                catch (IndexOutOfRangeException)
                {
                    //Se informe que no se encontró nada porque el argumento de busqueda esta fuera del rango.
                    MessageBox.Show("Su consulta no ha arrojado resultados.", "INFORME", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    //Si llega a ocurrir algún error en estado editar
                    estEsperandoOperacion();
                }
                catch (Exception ex)
                {
                    //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                    MessageBox.Show("La conexión a la base de datos no fué exitosa. /n /n Comuniquese con su desarrollador para solucionar el problema /n /n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    //Si llega a ocurrir algún error en estado editar 
                    this.estEsperandoOperacion();
                }

            }
        }

        protected override void cargarTxt()//carga los txt con los datos de la fila de datagride seleccionada
        {
            usuariosTa.FillByNombreContraseña(centerQuimDs.Usuarios, dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[0].Value.ToString(), dgvUsuarios.Rows[dgvUsuarios.CurrentRow.Index].Cells[2].Value.ToString());

            txtNombreUsuario.Text = centerQuimDs.Usuarios[0].nombreUsuario;

            if (centerQuimDs.Usuarios[0].tipoUsuario == "A")
            {
                cboTipoUsuario.SelectedIndex = 0;

            }
            else
            {
                if (centerQuimDs.Usuarios[0].tipoUsuario == "S")
                {
                    cboTipoUsuario.SelectedIndex = 1;
                }
                
            }

            txtContraseña.Text = centerQuimDs.Usuarios[0].contraseña;

            txtContraseñaRe.Text = txtContraseña.Text;

            refrescarUsuariosDs = true; //Se debe refrescar el UsuarioDs, ya que fue usado para este propósito sólo contiene un usuario. 

        }

        protected override void validarContraseña()
        {
            if (txtContraseña.Text.Trim() == "")
            {
                errorProvider1.SetError(txtContraseña, "Contraseña: el campo se encuentra vacio\n\n");
            }
            else
            {
                errorProvider1.SetError(txtContraseña, new ValidarDatos().validarLongitud("Contraseña:", txtContraseña.Text, 15));

                if (errorProvider1.GetError(txtContraseña) == "") //si la validacion de longitud en contraseña está bien
                {
                    usuariosTa.FillByNombreContraseña(centerQuimDs.Usuarios, txtNombreUsuario.Text.Trim().ToUpper(), txtContraseña.Text.Trim().ToUpper()); //busca si ya no existe otro usuario con la misma contraseña.

                    if (centerQuimDs.Usuarios.Rows.Count > 0)
                    {
                        errorProvider1.SetError(txtNombreUsuario, "Usuario: Nombre de usuario y contraseña existente, intente cambiar la contraseña.");

                    }
                }

            }
        }

    }

}
